/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.liquidByte.trafficMustang.server.webService;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.liquidByte.trafficMustang.server.dataModel.Deslocamento;
import org.liquidByte.trafficMustang.server.dataModel.Localizacao;
import org.liquidByte.trafficMustang.server.services.ConverterService;
import org.liquidByte.trafficMustang.server.services.DeslocamentoService;
import org.liquidByte.trafficMustang.server.webService.base.WebService;
import org.liquidByte.trafficMustang.server.webService.dto.DeslocamentoDTO;
import org.liquidByte.trafficMustang.server.webService.dto.LocalizacaoDTO;

/**
 * REST Web Service
 *
 * @author Alexandre
 */
@Stateless
@Path("deslocamento")
public class DeslocamentoWebService extends WebService {

    @EJB
    private DeslocamentoService deslocamentoService;
    @EJB
    private ConverterService converter;

    @POST
    @Consumes("application/json")
    @Produces("application/json")
    @Path("informar")
    public String informar(String data) {
        try {
            DeslocamentoDTO deslocamento = this.toObject(data, DeslocamentoDTO.class);
            this.deslocamentoService.informar(this.converter.getDeslocamentoDto().convert(deslocamento));
            return this.success();
        } catch (Exception e) {
            return this.error(e);
        }
    }
    
    @POST
    @Consumes("application/json")
    @Produces("application/json")
    @Path("localizar")
    public String localizar(String data) {
        try {
            LocalizacaoDTO[] params = this.toObject(data, LocalizacaoDTO[].class);
            
            Localizacao origem = null;
            Localizacao destino = null;
            
            if (params.length > 0) {
                origem = this.converter.getLocalizacaoDto().convert(params[0]);
            }
            if (params.length > 1) {
                destino = this.converter.getLocalizacaoDto().convert(params[1]);
            }
                    
            List<Deslocamento> list = this.deslocamentoService.localizar(origem, destino);
            return this.result(this.converter.getDeslocamento().convert(list));
        } catch (Exception e) {
            return this.error(e);
        }
    }
    
    @POST
    @Consumes("application/json")
    @Produces("application/json")
    @Path("cancelar")
    public String cancelar(String data) {
        try {
            DeslocamentoDTO dto = this.toObject(data, DeslocamentoDTO.class);
            Deslocamento deslocamento = this.converter.getDeslocamentoDto().convert(dto);
            this.deslocamentoService.cancelar(deslocamento);
            return this.success();
        } catch (Exception e) {
            return this.error(e);
        }
    }
    
    @POST
    @Consumes("application/json")
    @Produces("application/json")
    @Path("finalizar")
    public String finalizar(String data) {
        try {
            DeslocamentoDTO dto = this.toObject(data, DeslocamentoDTO.class);
            Deslocamento deslocamento = this.converter.getDeslocamentoDto().convert(dto);
            this.deslocamentoService.finalizar(deslocamento);
            return this.success();
        } catch (Exception e) {
            return this.error(e);
        }
    }
}
